本文是学习GB-T 33603-2017 电力系统模型数据动态消息编码规范. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们
本标准规定了应用于电力系统模型数据的动态消息编码,包括编码结构、数据类型、编码方式、基本
编码规则以及编码的应用等。
本标准适用于动态消息通信和电力系统模型数据描述。
下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅所注日期的版本适用于本
文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。
GB/T 16263.1—2006 信息技术 ASN.1 编码规则 第1部分:基本编码规则(BER)、
正则编码
规则(CER) 和非典型编码规则(DER) 规范
GB/T 16720.1 工业自动化系统 制造报文规范(MMS) 第1部分:服务定义
GB/T 18700.1 远动设备和系统 第6部分:与ISO 标准和ITU-T
建议兼容的远动协议 第503
篇:TASE.2 服务和协议
DL/T 476 电力系统实时数据通信应用层协议
DL/T 634.5104 远动设备及系统 第5-104部分:传输规约采用标准传输协议集的
IEC 60870-5- 101 网络访问
DL/T 860.72 电力自动化通信网络和系统
第7-2部分:基本信息和通信结构-抽象通信服务接
口(ACSI)
DL/Z 890.401 能量管理系统应用程序接口(EMS-API)
第401部分:组件接口规范(CIS) 框架
DL/T 1080.3 电力企业应用集成配电管理的系统接口 第3部分:电网运行接口
下列术语和定义适用于本文件。
3.1
编码方式 coding mode
数据属性描述和数据组织的方式。
3.2
动态消息编码 dynamic message coding
以自包含方式动态描述电力系统模型和数据的编码方式,简称 M
编码。本标准给出了 M0、M1、 M2 和 M3 四种编码方式。
3.3
类型展开 type expansion
将复合数据类型处理为简单类型的组合。
下列缩略语适用于本文件。
GB/T 33603—2017
ASN.1: 抽象语法标记(Abstract Syntax Notation One)
BER:ASN.1 中的基本编码规则(Basic Encoding Rules)
CDR: 通用数据表示,在CORBA GIOP 中定义(Common Data Representation)
CH: 编码头部(Coding Head)
CI:类标识(Class Identifier)
CORBA: 公共对象请求代理架构(Common Object Request Broker Architecture)
CT: 编码类型(Coding Type)
DL: 描述长度(Description Length)
EF:扩展标志(Extend Flag)
GIOP:CORBA 的通用对象请求代理间协议(General Inter-ORB Protocol)
N-TLV: 名字-类型-长度-值(Name-Type Length Value)
N-TL: 名字-类型-长度(Name-Type Length)
OC: 对象个数(Object Count)
OS: 对象尺寸(Object Size)
TLV: 类型-长度-值,为 ASN.1 的编码方式(Type Length Value)
一块完整的采用M 编码的存储区域称为 M 编码区域,应由1个 M 编码头部和 M
编码数据组成,
编码头部为1个八位位组或多个八位位组,其中第1个八位位组用于区分所采用的编码方式。编码区
域示意见图1。
|
---|
图 1 编码区域示意图
M 编码中用于区分各类编码方式的顶层数据称为 M 编码头部,是所有 M
编码方式公用的数据结
构。编码头部的第1个八位位组用于区分所有的编码方式,也称为类型码,其中编码类型
CT 和高位标 志 H 是必选的;扩展标志 EF 只在 M2 和 M3 时使用。高位标志 H
表示发送方的位序,大端点机器设 置为“1",小端点机器设置为"0”。 M
编码头部的定义见图2。
style="width:6.14722in;height:3.06875in" />
图 2 编码头部八位位组定义
GB/T 33603—2017
编码类型 CT 用于区分编码的方式,采用编码头部中的两个位表示,按编码类型
CT 值的不同分成
四种编码方式,其对应关系见表1。
表 1 编码类型表
|
|
|
|
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
扩展标志 EF 用于对类描述和头部扩展进行分类,在 M2 和 M3 时有效。 MO 和
M1 不进行头部扩
展,类描述采用短描述。扩展意义描述见表2。
表 2 扩展标志描述
|
|
|
---|---|---|
|
|
|
|
|
|
本标准直接采用ASN.1 定义的基本数据类型,并进行相应扩充。在 M
编码中当数据类型字段的
第7、8位不置位时,1~6位表示这些基本数据类型和用于扩充的类型,基本数据类型的编号和说明见
表3。基本数据和扩充类型的编码规则如下:
a) 基本数据类型范围:0(000000)~47(101111);
b)
用户扩充类型范围:48(110000)~63(111111),当需要更多的类型时,可使用该范围的类型
编号。
关于指针和泛型的定义采用如下方案:
a) 第7位置1:表示指针,即由第0至第5位定义的类型的指针;
b) 第8位置1:表示泛型any,后面的7位表示当前的类型。
表 3 基本数据类型编码
|
|
|
|
|
---|---|---|---|---|
|
|
|||
|
|
|
|
|
|
|
|
|
|
GB/T 33603—2017
表 3 ( 续 )
|
|
|
|
|
---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
style="width:0.19997in" />class="anchor">GB/T 33603—2017
表3(续)
|
|
|
|
|
---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24bit int |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 兼容 ASN.1 编码方式(M0)
MO 编码方式应采用 GB/T 16263.1—2006
定义的基本编码规则,为动态消息编码,用于 GB/T 16720.1、GB/T
18700.1、DL/T 860.72 等的数据结构的描述。 MO 编码方式在 ASN.1 编码数据
的开始加入1个八位位组的编码头部,实现对 ASN.1 编码的兼容。 ASN.1
基本编码方式采用TLV 编
码方式,用类型和长度来标记每个原始数据项,编码灵活且与机器无关,可实现动态编码,保障运行时的
数据类型安全。在实时环境中应用时,可进行适当简化,如:不支持缺省值
(Default)、 可 选 项
(Optional)、序列和集合的自动排序等动态特性。 MO
低八位位组
|
---|
1个八
位位组
图 3 M0 结构示意图
8 带名字 ASN.1 编码方式(M1)
M1 编码方式参照 ASN.1 的编码规则,为动态消息编码,用于 DL/T 860.72
短结构描述、 DL/Z 890.401 属性名传递等。 M1 编码方式在 TLV
编码方式的基础上加入名字一项,变为 N-TLV,
其中名字以自然内存零('\0')结束,从而与其他数据分开。 M1
编码结构示意见图4。
低八位位组 高八位位组
|
|
|
|
|
---|
位位组 |
|
1个八 位位组 | 1个八 位位组 |
|
---|
|
|
|
|
---|
多个八 位位组 |
1个八 位位组 | 1个八 位位组 |
|
---|
图 4 M1 结构示意图
GB/T 33603—2017
M2 编码方式参照CDR 的编码规则,为静态对象消息编码,用于 DL/T 476、DL/T
634.5104 等传 输协议的数据结构的描述。 M2
编码方式需要扩展编码头部,增加类标识 CI 用于标识对象的类别,对 象尺寸OS
(为无符号数值型)用于标识对象的长度,对象个数 OC
(为无符号数值型)用于标识对象的总
个数。 M2 的编码结构示意见图5。
style="width:10.84722in;height:2.40694in" />
style="width:0.22011in" />
图 5 M2 结构示意图
头部扩展分成两种:4个八位位组扩展和8个八位位组扩展,由类型码CH
定义中扩展标志(EF) 的
第7位决定,为0时扩展为4个八位位组,为1时扩展为8个八位位组。4个八位位组扩展方式扩展为
类型码1个八位位组、对象标识1个八位位组、对象尺寸1个八位位组、对象个数1个八位位组;8个八
位位组扩展方式扩展为类型码1个八位位组、对象标识两个八位位组、对象尺寸两个八位位组、对象个
数三个八位位组,其中所有的两个和三个八位位组数据采用小端点位序排放,即低位在前,高位在后的
排放方式。对象1至对象 OC
为描述的对象,所有对象的类型、长度一致。类型由扩展头部中的类标识
决定,长度由扩展头部中的对象尺寸决定,个数由扩展头部中的对象个数决定。对象头部扩展方式见
图 6 。
当CH.EF.7=0
用4个八位位组
扩展
当CII.EF.7=1
用8个八位位组
扩展
低八位位组 高八位位组
|
|
|
|
---|
1个八 1个八 1个八 1个八
位位组 位位组 位位组 位位组
低八位位组 高八位位组
|
|
|
|
---|
位位组 |
|
|
3个八 位位组 |
---|
图 6 对象头部扩展示意图
M3 编码方式参照 CDR
的编码规则,为动态编码规则,用于通信双方协商通信内容,适用于
GB/T 33603—2017
DL/Z 890.401、DL/T 1080.3、DL/T 860.72等标准的数据结构的描述。 M3
编码方式需要扩展编码头 部,其扩展方式与 M2
使用的头部扩展方式相似,类标识用于表示类描述的种类,将图6中的对象尺寸 OS
换成类长度CS, 用于接收方在类展开时进行校验,将图6中的对象个数 OC
换成类描述长度DL, 用
于标识类描述的总长度。头部扩展后是类的名字,以自然内存零('\0')结尾,类名字后对类的属性用类
描述项依次进行描述,将其中的复合类型展开为第6章描述的简单类型。 M3
编码结构示意见图7。
style="width:11.34722in;height:2.64028in" />
图 7 M3 结构示意图
类描述项应采用与N-TLV(M1 编码方式中使用)相仿的描述方式,去掉其中的 V
项,成为 N-TL
方式,用于描述类属性信息。类描述项的长度分两种:短描述和长描述,由编码头部CH
中扩展标志 EF
(见表2)的第6位决定,为0时表示短描述方式,长度用1个八位位组;为1时表示长描述方式,长度用
2个八位位组,类描述项的示意见图8。
CH.EF,6=0
使用1个
八位位组
CJJ.EF.6=1 使用2个 八位位组
低八位位组 高八位位组
|
|
|
|
---|
多个八 1个八 1个八
位位组 位位组 位位组
低八位位组 高八位位组
|
|
|
|
---|
1个八
位位组
图 8 M 编码类描述项示意图
对象内部结构的描述根据C/C++
数据结构定义,将各种复合数据结构如:结构(struct)、数组(ar-
ray),以及数组和结构的组合、嵌套,
一律依次展开,直至形成系统支持的简单数据类型(或称原子类型,
见表3)的一维列表。
一维和多维数组按下标依次展开为元素,直至基本数据类型。复合结构的嵌套
(nest)层数没有限制,从实用和效率角度考虑,工程实现应支持两层以上的嵌套。
枚举(enum)
类型可展开为一组整型常数值,枚举值可展开为一个整型常数值。联合(union)
类型
对应于 ASN.1 中的 CHOICE, 可按上层选定的结构展开。对于 C++
扩展的标准模版库(Standard
GB/T 33603—2017
Template
Library,STL)中的容器类型,如:向量(vector)、字符串(string)、列表(list)、集合(set)、队
列 (queue) 等,可按数组展开,在数组第一个元素之前增加 size和 max size
两个整型变量,分别表示当前
尺寸和最大尺寸。对于容器类型的组合及与结构、数组的复合,可按该规则展开。
按简单类型的自然边界对齐原始数据,编码后的对象数据与 C/C++
相应数据结构编译后在内存
中的存储方式相同,包括由于数据对齐而产生的孔洞(hole),编译时宜慎用或不用压缩选项。为减少对
齐孔洞,应精心设计数据结构,选择合适的数据类型,调整各数据项的前后顺序,使尺寸较大的数据项在
8或4八位位组位置对齐。常见基本数据类型的对齐边界见表4。
表 4 常用基本数据类型的对齐边界
|
|
---|---|
|
|
|
|
|
|
|
|
|
|
展开的简单类型列表,由 M 编码头部的 H
表示位序。大端点的机器设置为"1",小端点的机器设
置为"0"。若接收方机器的位序与发送方一致,无需做任何转换处理;不一致时应由接收方进行位序
转换。
M2
为静态对象消息编码,数据不能自我识别,发送方和接收方之间应有关于交换数据类型的约
定。本标准对运行时发生的数据类型不匹配,不规定检测手段。
M2 和 M3
结合使用可实现动态消息编码,由于类描述规整,而且仅出现一次,发送方和接收方的
编解码简便,编码效率较高,尤其是对同类型机器之间的数据交换,双方可直接使用编码数据。
原语的描述包括服务程序名字及其参数,与普通数据结构意义不同,宜采用ASN.1
中的集合(set)
进行描述,程序名和各参数按出现先后次序依次排列。
四种编码方式各具特点:M0 用于兼容ASN.1;M1 在 ASN.1
的基础上加入名字选项;M2 扩展编码 头部,编码效率高;M3
扩展头部,描述类信息。应根据应用场景选择编码方式,几种推荐的应用方式
如下:
style="width:1.19998in;height:0.45342in" />
style="width:1.12005in;height:0.52008in" />
style="width:11.8in;height:0.46662in" />
style="width:11.71331in;height:0.51986in" />GB/T 33603—2017
a) 编码方式 MO: 用于 ASN.1 的全兼容方式实现;
b) 编码方式 M1: 用于少量数据的结构化描述,适用于 DL/T 860.72
的模型直接映射到 TCP 报 文的应用场合;
c) 编码方式 M2:
当发送方和接收方已预先知道需要交换的对象数据结构时,推荐采用编码方式
M2, 程序处理方便,总体效率高。典型应用场合为:实时应用层通信协议 DL
476、 DL/T 634.5104;
d) 编码方式 M3: 用于通信双方交换对象数据结构。
e) 组合使用:对于电力系统实时应用场合,可先用 M3
编码将头部类型和标识列表传输到接收 方,随后持续使用M2
编码高效传输对象数据,直到发现头部有变化时,再用 M3 编码重新传
输头部,发挥 M2 的高效率和 M3 的灵活性等优势。
12.2 在电力系统模型数据描述中的应用
12.2.1 整体结构
当需要交互多组具有相关性的结构化数据时,可通过目录(Base)和索引项(Index)对这些结构化数据
进行描述,形成"目录-索引-数据"的整体结构,如图9所示。目录、索引的C
语言格式定义可参见附录 A。
|
---|
图 9 整体结构关系图
12.2.2 目录结构描述
目录用于定位不同的索引项,包括M2 头部、修改时间、总尺寸等信息。 M2
头部采用4个八位位组 扩展方式,详细定义见9对象编码方式(M2),
其中类标识固定为1,从而与其他的 M2 单个结构化数据
描述区分;类定义文件名,用于存放类定义所在文件的文件名;类定义长度,用于存放用
M3 描述的类结 构的长度;类定义地址,用于存放用M3
语言描述的类结构的地址;索引偏移,用于存放第一个索引项的
偏移量;索引地址,用于存放第一个索引项的入口地址(进程内使用);数据块偏移,用于存放第一个数据
块的偏移量;数据块地址,用于存放第一个数据块的入口地址(进程内使用)。目录结构示意图见图10。
低八位位组
M2头部 修改时间 总尺寸 类定义文件名 类定义长度 类定义地址 索引个数
索引偏移 索引地址 数据块偏移
4个八 4个八 8个八 8个八 4个八 8个八 4个八 4个八 8个八 4个八
位位组 位位组 位位组 位位组 位位组 位位组 位位组 位位组 位位组 位位组
图10 目录结构示意图
12.2.3 索引结构描述
索引项用于描述和定位不同的数据块,包括对象个数、对象尺寸、对象类型等信息。对象个数,用于
标识本类对象的个数;对象尺寸,用于标识本类对象的长度;数据块总尺寸,用于存放数据域的总长度;
对象块偏移,用于存放第一个对象的偏移量;对象块入口地址,用于存放第一个对象块的入口地址(进程
内使用)。索引结构示意图见图11。
GB/T 33603—2017
低八位位组 高八位位组
|
|
|
|
|
|
---|
4个八 2个八 2个八 4个八 4个八 8个八
位位组 位位组 位位组 位位组 位位组 位位组
图 1 1 索引结构示意图
GB/T 33603—2017
(资料性附录)
电力系统模型数据描述 C 语言格式定义
A.1 Index 结构的C 语言格式定义如下:
typdef struct Index
INT32U
INT16U
INT16U
INT32U
INT32U
void
}tIndex;
number;
size;
type;
data size;
_
offset;
* point;
//对象个数
//对象尺寸
//对象类型
//数据块总尺寸,应大于等于对象个数*对象尺寸
//对象块偏移位置
//对象块地址
A.2 Base 结构的 C 语言格式定义如下:
typdef struct Base
INT32U |
|
|
---|---|---|
INT32U |
|
|
INT64U |
|
|
INT8U |
|
|
INT32U |
|
|
void |
|
|
INT32 |
|
|
INT32 |
|
|
tIndex |
|
|
INT32 |
|
|
void |
|
|
tBase;
更多内容 可以 GB-T 33603-2017 电力系统模型数据动态消息编码规范. 进一步学习